{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction\n",
    "-----\n",
    "\n",
    "In this assignment you will recursively estimate the position of a vehicle along a trajectory using available measurements and a motion model. \n",
    "\n",
    "The vehicle is equipped with a very simple type of LIDAR sensor, which returns range and bearing measurements corresponding to individual landmarks in the environment. The global positions of the landmarks are assumed to be known beforehand. We will also assume known data association, that is, which measurment belong to which landmark.\n",
    "\n",
    "## Motion and Measurement Models\n",
    "-----\n",
    "\n",
    "### Motion Model\n",
    "\n",
    "The vehicle motion model recieves linear and angular velocity odometry readings as inputs, and outputs the state (i.e., the 2D pose) of the vehicle:\n",
    "\n",
    "\\begin{align}\n",
    "\\mathbf{x}_{k} &= \\mathbf{x}_{k-1} + T\n",
    "\\begin{bmatrix}\n",
    "\\cos\\theta_{k-1} &0 \\\\\n",
    "\\sin\\theta_{k-1} &0 \\\\\n",
    "0 &1\n",
    "\\end{bmatrix}\n",
    "\\left(\n",
    "\\begin{bmatrix}\n",
    "v_k \\\\\n",
    "\\omega_k\n",
    "\\end{bmatrix}\n",
    "+ \\mathbf{w}_k\n",
    "\\right)\n",
    "\\, , \\, \\, \\, \\, \\, \\mathbf{w}_k = \\mathcal{N}\\left(\\mathbf{0}, \\mathbf{Q}\\right)\n",
    "\\end{align}\n",
    "\n",
    "- $\\mathbf{x}_k = \\left[ x \\, y \\, \\theta \\right]^T$ is the current 2D pose of the vehicle\n",
    "- $v_k$ and $\\omega_k$ are the linear and angular velocity odometry readings, which we use as inputs to the model\n",
    "\n",
    "The process noise $\\mathbf{w}_k$ has a (zero mean) normal distribution with a constant covariance $\\mathbf{Q}$.\n",
    "\n",
    "### Measurement Model\n",
    "\n",
    "The measurement model relates the current pose of the vehicle to the LIDAR range and bearing measurements $\\mathbf{y}^l_k = \\left[r \\, \\phi \\right]^T$.\n",
    "\n",
    "\\begin{align}\n",
    "\\mathbf{y}^l_k =\n",
    "\\begin{bmatrix}\n",
    "\\sqrt{(x_l - x_k - d\\cos\\theta_{k})^2 + (y_l - y_k - d\\sin\\theta_{k})^2} \\\\\n",
    "atan2\\left(y_l - y_k - d\\sin\\theta_{k},x_l - x_k - d\\cos\\theta_{k}\\right) - \\theta_k\n",
    "\\end{bmatrix}\n",
    "+\n",
    "\\mathbf{n}^l_k\n",
    "\\, , \\, \\, \\, \\, \\, \\mathbf{n}^l_k = \\mathcal{N}\\left(\\mathbf{0}, \\mathbf{R}\\right)\n",
    "\\end{align}\n",
    "\n",
    "- $x_l$ and $y_l$ are the ground truth coordinates of the landmark $l$\n",
    "- $x_k$ and $y_k$ and $\\theta_{k}$ represent the current pose of the vehicle\n",
    "- $d$ is the known distance between robot center and laser rangefinder (LIDAR)\n",
    "\n",
    "The landmark measurement noise $\\mathbf{n}^l_k$ has a (zero mean) normal distribution with a constant covariance $\\mathbf{R}$.\n",
    "\n",
    "## Getting Started\n",
    "-----\n",
    "\n",
    "Since the models above are nonlinear, we recommend using the extended Kalman filter (EKF) as the state estimator.\n",
    "Specifically, you will need to provide code implementing the following steps:\n",
    "- the prediction step, which uses odometry measurements and the motion model to produce a state and covariance estimate at a given timestep, and\n",
    "- the correction step, which uses the range and bearing measurements provided by the LIDAR to correct the pose and pose covariance estimates\n",
    "\n",
    "### Unpack the Data\n",
    "First, let's unpack the available data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "with open('data/data.pickle', 'rb') as f:\n",
    "    data = pickle.load(f)\n",
    "\n",
    "t = data['t']  # timestamps [s]\n",
    "\n",
    "x_init  = data['x_init'] # initial x position [m]\n",
    "y_init  = data['y_init'] # initial y position [m]\n",
    "th_init = data['th_init'] # initial theta position [rad]\n",
    "\n",
    "# input signal\n",
    "v  = data['v']  # translational velocity input [m/s]\n",
    "om = data['om']  # rotational velocity input [rad/s]\n",
    "\n",
    "# bearing and range measurements, LIDAR constants\n",
    "b = data['b']  # bearing to each landmarks center in the frame attached to the laser [rad]\n",
    "r = data['r']  # range measurements [m]\n",
    "l = data['l']  # x,y positions of landmarks [m]\n",
    "d = data['d']  # distance between robot center and laser rangefinder [m]\n",
    "d = np.squeeze(d)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that distance from the LIDAR frame to the robot center is provided and loaded as an array into the `d` variable.\n",
    "\n",
    "### Ground Truth\n",
    "If available, it is useful to plot the ground truth position and orientation before starting the assignment.\n",
    "\n",
    "<table><tr>\n",
    "<td> <img src=\"data/gtruth.png\" alt=\"Ground Truth\" width=\"350\"/> </td>\n",
    "<td> <img src=\"data/gtruth2.png\" alt=\"Ground Truth\" width=\"350\"/> </td>\n",
    "</tr></table>\n",
    "\n",
    "Notice that the orientation values are wrapped to the $\\left[-\\pi,\\pi\\right]$ range in radians."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Initializing Parameters\n",
    "\n",
    "Now that our data is loaded, we can begin getting things set up for our solver. One of the\n",
    "most important aspects of designing a filter is determining the input and measurement noise covariance matrices, as well as the initial state and covariance values. We set the values here:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {},
   "outputs": [],
   "source": [
    "v_var = 0.01  # translation velocity variance  \n",
    "om_var = 0.01  # rotational velocity variance \n",
    "r_var = 0.001  # range measurements variance\n",
    "b_var = 0.001  # bearing measurement variance\n",
    "\n",
    "Q_km = np.diag([v_var, om_var]) # input noise covariance \n",
    "cov_y = np.diag([r_var, b_var])  # measurement noise covariance \n",
    "\n",
    "x_est = np.zeros([len(v), 3])  # estimated states, x, y, and theta\n",
    "P_est = np.zeros([len(v), 3, 3])  # state covariance matrices\n",
    "\n",
    "x_est[0] = np.array([x_init, y_init, th_init]) # initial state\n",
    "P_est[0] = np.diag([1, 1, 0.1]) # initial state covariance\n",
    "P_check = P_est[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Remember:** that it is neccessary to tune the measurement noise variances `r_var`, `b_var` in order for the filter to perform well!\n",
    "\n",
    "In order for the orientation estimates to coincide with the bearing measurements, it is also neccessary to wrap all estimated $\\theta$ values to the $(-\\pi , \\pi]$ range."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Wraps angle to (-pi,pi] range\n",
    "def wraptopi(x):\n",
    "    if x > np.pi:\n",
    "        x = x - (np.floor(x / (2 * np.pi)) + 1) * 2 * np.pi\n",
    "    elif x < -np.pi:\n",
    "        x = x + (np.floor(x / (-2 * np.pi)) + 1) * 2 * np.pi\n",
    "    return x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## Correction Step\n",
    "-----\n",
    "First, let's implement the measurement update function, which takes an available landmark measurement $l$ and updates the current state estimate $\\mathbf{\\check{x}}_k$.\n",
    "For each landmark measurement received at a given timestep $k$, you should implement the following steps:\n",
    "\n",
    "- Compute the measurement model Jacobians at $\\mathbf{\\check{x}}_{k}$\n",
    "\\begin{align}\n",
    "\\mathbf{y}^l_k = &\\mathbf{h}(\\mathbf{x}_{k}, \\mathbf{n}^l_k) \\\\\\\\\n",
    "\\mathbf{H}_{k} = \\frac{\\partial \\mathbf{h}}{\\partial \\mathbf{x}_{k}}\\bigg|_{\\mathbf{\\check{x}}_{k},0}& \\, , \\, \\, \\, \\,\n",
    "\\mathbf{M}_{k} = \\frac{\\partial \\mathbf{h}}{\\partial \\mathbf{n}_{k}}\\bigg|_{\\mathbf{\\check{x}}_{k},0} \\, .\n",
    "\\end{align}\n",
    "- Compute the Kalman Gain\n",
    "\\begin{align}\n",
    "\\mathbf{K}_k &= \\mathbf{\\check{P}}_k \\mathbf{H}_k^T \\left(\\mathbf{H}_k \\mathbf{\\check{P}}_k \\mathbf{H}_k^T + \\mathbf{M}_k \\mathbf{R}_k \\mathbf{M}_k^T \\right)^{-1} \n",
    "\\end{align}\n",
    "- Correct the predicted state\n",
    "\\begin{align}\n",
    "\\mathbf{\\check{y}}^l_k &= \\mathbf{h}\\left(\\mathbf{\\check{x}}_k, \\mathbf{0}\\right) \\\\\n",
    "\\mathbf{\\hat{x}}_k &= \\mathbf{\\check{x}}_k + \\mathbf{K}_k \\left(\\mathbf{y}^l_k - \\mathbf{\\check{y}}^l_k\\right)\n",
    "\\end{align}\n",
    "- Correct the covariance\n",
    "\\begin{align}\n",
    "\\mathbf{\\hat{P}}_k &= \\left(\\mathbf{I} - \\mathbf{K}_k \\mathbf{H}_k \\right)\\mathbf{\\check{P}}_k\n",
    "\\end{align}\n",
    "\n",
    "\n",
    "### Measurement Model\n",
    "\n",
    "The measurement model relates the current pose of the vehicle to the LIDAR range and bearing measurements $\\mathbf{y}^l_k = \\left[r \\, \\phi \\right]^T$.\n",
    "\n",
    "\\begin{align}\n",
    "\\mathbf{y}^l_k =\n",
    "\\begin{bmatrix}\n",
    "\\sqrt{(x_l - x_k - d\\cos\\theta_{k})^2 + (y_l - y_k - d\\sin\\theta_{k})^2} \\\\\n",
    "atan2\\left(y_l - y_k - d\\sin\\theta_{k},x_l - x_k - d\\cos\\theta_{k}\\right) - \\theta_k\n",
    "\\end{bmatrix}\n",
    "+\n",
    "\\mathbf{n}^l_k\n",
    "\\, , \\, \\, \\, \\, \\, \\mathbf{n}^l_k = \\mathcal{N}\\left(\\mathbf{0}, \\mathbf{R}\\right)\n",
    "\\end{align}\n",
    "\n",
    "- $x_l$ and $y_l$ are the ground truth coordinates of the landmark $l$\n",
    "- $x_k$ and $y_k$ and $\\theta_{k}$ represent the current pose of the vehicle\n",
    "- $d$ is the known distance between robot center and laser rangefinder (LIDAR)\n",
    "\n",
    "The landmark measurement noise $\\mathbf{n}^l_k$ has a (zero mean) normal distribution with a constant covariance $\\mathbf{R}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [],
   "source": [
    "def measurement_update(lk, rk, bk, P_check, x_check):\n",
    "    \n",
    "    x_k = x_check[0, 0]\n",
    "    y_k = x_check[1, 0]\n",
    "    theta_k = x_check[2, 0]\n",
    "    x_l = lk[0]\n",
    "    y_l = lk[1]\n",
    "    \n",
    "    x_dist = x_l - x_k - d * np.cos(theta_k)\n",
    "    y_dist = y_l - y_k - d * np.sin(theta_k)\n",
    "    q = np.linalg.norm(np.array([x_dist, y_dist]))\n",
    "    dist = x_dist ** 2 + y_dist ** 2\n",
    "\n",
    "\n",
    "    H = np.mat([[-x_dist/q, -y_dist/q, (x_dist*d*np.sin(theta_k) - y_dist*d*np.cos(theta_k))/q],\n",
    "               [y_dist/dist, -x_dist/dist, (-x_dist*d*np.cos(theta_k) - y_dist*d*np.sin(theta_k))/dist - 1]])\n",
    "    \n",
    "    M = np.identity(2)\n",
    "\n",
    "    K = P_check.dot(H.T).dot(np.linalg.inv(H.dot(P_check.dot(H.T)) + M.dot(cov_y.dot(M.T))))\n",
    "\n",
    "    y_k = np.mat([[q], [wraptopi(np.arctan2(y_dist, x_dist) - theta_k)]])\n",
    "    y_meas = np.mat([[rk], [wraptopi(bk)]])\n",
    "\n",
    "    # 3. Correct predicted state (remember to wrap the angles to [-pi,pi])\n",
    "    \n",
    "    x_check = x_check.reshape(3, 1)\n",
    "    x_check = x_check + K.dot(y_meas - y_k)\n",
    "    x_check[2, 0] = wraptopi(x_check[2, 0])\n",
    "\n",
    "    # 4. Correct covariance\n",
    "    P_check = (np.identity(3) - K.dot(H)).dot(P_check)\n",
    "\n",
    "    return x_check, P_check\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prediction Step\n",
    "-----\n",
    "Now, implement the main filter loop, defining the prediction step of the EKF using the motion model provided:\n",
    "\n",
    "\\begin{align}\n",
    "\\mathbf{\\check{x}}_k &= \\mathbf{f}\\left(\\mathbf{\\hat{x}}_{k-1}, \\mathbf{u}_{k-1}, \\mathbf{0} \\right) \\\\\n",
    "\\mathbf{\\check{P}}_k &= \\mathbf{F}_{k-1}\\mathbf{\\hat{P}}_{k-1}\\mathbf{F}_{k-1}^T + \\mathbf{L}_{k-1}\\mathbf{Q}_{k-1}\\mathbf{L}_{k-1}^T \\, .\n",
    "\\end{align}\n",
    "\n",
    "Where\n",
    "\n",
    "\\begin{align}\n",
    "\\mathbf{F}_{k-1} = \\frac{\\partial \\mathbf{f}}{\\partial \\mathbf{x}_{k-1}}\\bigg|_{\\mathbf{\\hat{x}}_{k-1},\\mathbf{u}_{k},0}  \\, , \\, \\, \\, \\,\n",
    "\\mathbf{L}_{k-1} = \\frac{\\partial \\mathbf{f}}{\\partial \\mathbf{w}_{k}}\\bigg|_{\\mathbf{\\hat{x}}_{k-1},\\mathbf{u}_{k},0} \\, .\n",
    "\\end{align}\n",
    "\n",
    "### Motion Model\n",
    "\n",
    "The vehicle motion model recieves linear and angular velocity odometry readings as inputs, and outputs the state (i.e., the 2D pose) of the vehicle:\n",
    "\n",
    "\\begin{align}\n",
    "\\mathbf{x}_{k} &= \\mathbf{x}_{k-1} + T\n",
    "\\begin{bmatrix}\n",
    "\\cos\\theta_{k-1} &0 \\\\\n",
    "\\sin\\theta_{k-1} &0 \\\\\n",
    "0 &1\n",
    "\\end{bmatrix}\n",
    "\\left(\n",
    "\\begin{bmatrix}\n",
    "v_k \\\\\n",
    "\\omega_k\n",
    "\\end{bmatrix}\n",
    "+ \\mathbf{w}_k\n",
    "\\right)\n",
    "\\, , \\, \\, \\, \\, \\, \\mathbf{w}_k = \\mathcal{N}\\left(\\mathbf{0}, \\mathbf{Q}\\right)\n",
    "\\end{align}\n",
    "\n",
    "- $\\mathbf{x}_k = \\left[ x \\, y \\, \\theta \\right]^T$ is the current 2D pose of the vehicle\n",
    "- $v_k$ and $\\omega_k$ are the linear and angular velocity odometry readings, which we use as inputs to the model\n",
    "\n",
    "The process noise $\\mathbf{w}_k$ has a (zero mean) normal distribution with a constant covariance $\\mathbf{Q}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {},
   "outputs": [],
   "source": [
    "#### 5. Main Filter Loop #######################################################################\n",
    "x_check = x_est[0]\n",
    "x_check = x_check.reshape((3, 1))\n",
    "\n",
    "for k in range(1, len(t)):  # start at 1 because we've set the initial prediciton\n",
    "\n",
    "    delta_t = t[k] - t[k - 1]  # time step (difference between timestamps)\n",
    "\n",
    "    theta = x_check[2, 0]\n",
    "    # 1. Update state with odometry readings (remember to wrap the angles to [-pi,pi])\n",
    "    u = np.mat([[v[k - 1]], [om[k - 1]]])\n",
    "    A = np.mat([[np.cos(theta), 0], [np.sin(theta), 0], [0, 1]])\n",
    "    A = A * delta_t\n",
    "    x_check = x_check + A.dot(u)\n",
    "    x_check[2, 0] = wraptopi(x_check[2, 0])\n",
    "\n",
    "    # 2. Motion model jacobian with respect to last state\n",
    "\n",
    "    F_km = np.mat([[1, 0, -delta_t*np.sin(theta)*v[k - 1]], [0, 1, delta_t*np.cos(theta)*v[k - 1]], [0, 0, 1]])\n",
    "\n",
    "    # 3. Motion model jacobian with respect to noise\n",
    "    L_km = A\n",
    "\n",
    "    # 4. Propagate uncertainty\n",
    "    P_check = F_km.dot(P_check.dot(F_km.T)) + L_km.dot(Q_km.dot(L_km.T))\n",
    "\n",
    "    # 5. Update state estimate using available landmark measurements\n",
    "    for i in range(len(r[k])):\n",
    "        x_check, P_check = measurement_update(l[i], r[k, i], b[k, i], P_check, x_check)\n",
    "\n",
    "    # Set final state predictions for timestep\n",
    "    x_est[k, 0] = x_check[0]\n",
    "    x_est[k, 1] = x_check[1]\n",
    "    x_est[k, 2] = x_check[2]\n",
    "    P_est[k, :, :] = P_check"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's plot the resulting state estimates:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "e_fig = plt.figure()\n",
    "ax = e_fig.add_subplot(111)\n",
    "ax.plot(x_est[:, 0], x_est[:, 1])\n",
    "ax.set_xlabel('x [m]')\n",
    "ax.set_ylabel('y [m]')\n",
    "ax.set_title('Estimated trajectory')\n",
    "plt.show()\n",
    "\n",
    "e_fig = plt.figure()\n",
    "ax = e_fig.add_subplot(111)\n",
    "ax.plot(t[:], x_est[:, 2])\n",
    "ax.set_xlabel('Time [s]')\n",
    "ax.set_ylabel('theta [rad]')\n",
    "ax.set_title('Estimated trajectory')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Are you satisfied wth your results? The resulting trajectory should closely resemble the ground truth, with minor \"jumps\" in the orientation estimate due to angle wrapping. If this is the case, run the code below to produce your solution file."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('submission.pkl', 'wb') as f:\n",
    "    pickle.dump(x_est, f, pickle.HIGHEST_PROTOCOL)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
